home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / T / TIFF Code Folder / dcompres.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-12-16  |  20.8 KB  |  578 lines  |  [TEXT/MPS ]

  1. /*
  2.  * dcompres.c
  3.  * Copyright (c) 1987, DEST Corporation.
  4.  */
  5.  
  6. /* Standard C Include files */
  7.  
  8. /* Primary Interface Files */
  9. #include "Types.h"
  10. #include "Resources.h"
  11. #include "Quickdraw.h"
  12. #include "Windows.h"
  13. #include "OSUtils.h"
  14.  
  15. #include "ToolUtils.h"
  16. #include "TextEdit.h"
  17. #include "Controls.h"
  18.  
  19. /* Application-specific Include files */
  20. #include "tifflib.h"
  21.  
  22. struct TreeStr 
  23.     {
  24.     Int16 type;
  25.     Int16 ptr;
  26.     };
  27.  
  28. static struct TreeStr whiteTable[] =
  29.                 {
  30.                                 /*
  31.   0 W               */      0,192,        /* W1
  32.   1 W0              */      0,115,        /* W01
  33.   2 W00             */      0,78,        /* W001
  34.   3 W000            */      0,57,        /* W0001
  35.   4 W0000           */      0,50,        /* W00001
  36.   5 W00000          */      0,45,        /* W000001
  37.   6 W000000         */      0,42,        /* W0000001
  38.   7 W0000000        */      0,17,        /* W00000001
  39.   8 W00000000       */      0,16,        /* W000000001
  40.   9 W000000000      */      0,15,        /* W0000000001
  41.  10 W0000000000     */      0,14,        /* W00000000001
  42.  11 W00000000000    */      0,13,        /* W000000000001
  43.  12 W000000000000   */      1,-2,    /*
  44.  13 W000000000001   */      1,-1,    /*    EOL 
  45.  14 W00000000001    */      1,-2,    /*
  46.  15 W0000000001     */      1,-2,    /*
  47.  16 W000000001      */      1,-2,    /*
  48.  17 W00000001       */      0,31,        /* W000000011
  49.  18 W000000010      */      0,24,        /* W0000000101
  50.  19 W0000000100     */      0,21,        /* W00000001001
  51.  20 W00000001000    */      1,1792,    /*
  52.  21 W00000001001    */      0,23,        /* W000000010011
  53.  22 W000000010010   */      1,1984,    /*
  54.  23 W000000010011   */      1,2048,    /*
  55.  24 W0000000101     */      0,28,        /* W00000001011
  56.  25 W00000001010    */      0,27,        /* W000000010101
  57.  26 W000000010100   */      1,2112,    /*
  58.  27 W000000010101   */      1,2176,    /*
  59.  28 W00000001011    */      0,30,        /* W000000010111
  60.  29 W000000010110   */      1,2240,    /*
  61.  30 W000000010111   */      1,2304,    /*
  62.  31 W000000011      */      0,35,        /* W0000000111
  63.  32 W0000000110     */      0,34,        /* W00000001101
  64.  33 W00000001100    */      1,1856,    /*
  65.  34 W00000001101    */      1,1920,    /*
  66.  35 W0000000111     */      0,39,        /* W00000001111
  67.  36 W00000001110    */      0,38,        /* W000000011101
  68.  37 W000000011100   */      1,2368,    /*
  69.  38 W000000011101   */      1,2432,    /*
  70.  39 W00000001111    */      0,41,        /* W000000011111
  71.  40 W000000011110   */      1,2496,    /*
  72.  41 W000000011111   */      1,2560,    /*
  73.  42 W0000001        */      0,44,        /* W00000011
  74.  43 W00000010       */      1,29,    /*
  75.  44 W00000011       */      1,30,    /*
  76.  45 W000001         */      0,49,        /* W0000011
  77.  46 W0000010        */      0,48,        /* W00000101
  78.  47 W00000100       */      1,45,    /*
  79.  48 W00000101       */      1,46,    /*
  80.  49 W0000011        */      1,22,    /*
  81.  50 W00001          */      0,56,        /* W000011
  82.  51 W000010         */      0,53,        /* W0000101
  83.  52 W0000100        */      1,23,    /*
  84.  53 W0000101        */      0,55,        /* W00001011
  85.  54 W00001010       */      1,47,    /*
  86.  55 W00001011       */      1,48,    /*
  87.  56 W000011         */      1,13,    /*
  88.  57 W0001           */      0,71,        /* W00011
  89.  58 W00010          */      0,64,        /* W000101
  90.  59 W000100         */      0,61,        /* W0001001
  91.  60 W0001000        */      1,20,    /*
  92.  61 W0001001        */      0,63,        /* W00010011
  93.  62 W00010010       */      1,33,    /*
  94.  63 W00010011       */      1,34,    /*
  95.  64 W000101         */      0,68,        /* W0001011
  96.  65 W0001010        */      0,67,        /* W00010101
  97.  66 W00010100       */      1,35,    /*
  98.  67 W00010101       */      1,36,    /*
  99.  68 W0001011        */      0,70,        /* W00010111
  100.  69 W00010110       */      1,37,    /*
  101.  70 W00010111       */      1,38,    /*
  102.  71 W00011          */      0,77,        /* W000111
  103.  72 W000110         */      0,74,        /* W0001101
  104.  73 W0001100        */      1,19,    /*
  105.  74 W0001101        */      0,76,        /* W00011011
  106.  75 W00011010       */      1,31,    /*
  107.  76 W00011011       */      1,32,    /*
  108.  77 W000111         */      1,1,    /*
  109.  78 W001            */      0,100,        /* W0011
  110.  79 W0010           */      0,87,        /* W00101
  111.  80 W00100          */      0,82,        /* W001001
  112.  81 W001000         */      1,12,    /*
  113.  82 W001001         */      0,86,        /* W0010011
  114.  83 W0010010        */      0,85,        /* W00100101
  115.  84 W00100100       */      1,53,    /*
  116.  85 W00100101       */      1,54,    /*
  117.  86 W0010011        */      1,26,    /*
  118.  87 W00101          */      0,95,        /* W001011
  119.  88 W001010         */      0,92,        /* W0010101
  120.  89 W0010100        */      0,91,        /* W00101001
  121.  90 W00101000       */      1,39,    /*
  122.  91 W00101001       */      1,40,    /*
  123.  92 W0010101        */      0,94,        /* W00101011
  124.  93 W00101010       */      1,41,    /*
  125.  94 W00101011       */      1,42,    /*
  126.  95 W001011         */      0,99,        /* W0010111
  127.  96 W0010110        */      0,98,        /* W00101101
  128.  97 W00101100       */      1,43,    /*
  129.  98 W00101101       */      1,44,    /*
  130.  99 W0010111        */      1,21,    /*
  131. 100 W0011           */      0,114,        /* W00111
  132. 101 W00110          */      0,107,        /* W001101
  133. 102 W001100         */      0,104,        /* W0011001
  134. 103 W0011000        */      1,28,    /*
  135. 104 W0011001        */      0,106,        /* W00110011
  136. 105 W00110010       */      1,61,    /*
  137. 106 W00110011       */      1,62,    /*
  138. 107 W001101         */      0,111,        /* W0011011
  139. 108 W0011010        */      0,110,        /* W00110101
  140. 109 W00110100       */      1,63,    /*
  141. 110 W00110101       */      1,0,    /*
  142. 111 W0011011        */        0,113,        /* W00110111
  143. 112 W00110110       */      1,320,    /*
  144. 113 W00110111       */      1,384,    /*
  145. 114 W00111          */      1,10,    /*
  146. 115 W01             */      0,155,        /* W011
  147. 116 W010            */      0,134,        /* W0101
  148. 117 W0100           */      0,119,        /* W01001
  149. 118 W01000          */      1,11,    /*
  150. 119 W01001          */      0,125,        /* W010011
  151. 120 W010010         */      0,122,        /* W0100101
  152. 121 W0100100        */      1,27,    /*
  153. 122 W0100101        */      0,124,        /* W01001011
  154. 123 W01001010       */      1,59,    /*
  155. 124 W01001011       */      1,60,    /*
  156. 125 W010011         */      0,133,        /* W0100111
  157. 126 W0100110        */      0,130,        /* W01001101
  158. 127 W01001100       */      0,129,        /* W010011001
  159. 128 W010011000      */      1,1472,    /*
  160. 129 W010011001      */      1,1536,    /*
  161. 130 W01001101       */      0,132,        /* W010011011
  162. 131 W010011010      */      1,1600,    /*
  163. 132 W010011011      */      1,1728,    /*
  164. 133 W0100111        */      1,18,    /*
  165. 134 W0101           */      0,146,        /* W01011
  166. 135 W01010          */      0,141,        /* W010101
  167. 136 W010100         */      0,138,        /* W0101001
  168. 137 W0101000        */      1,24,    /*
  169. 138 W0101001        */      0,140,        /* W01010011
  170. 139 W01010010       */      1,49,    /*
  171. 140 W01010011       */      1,50,    /*
  172. 141 W010101         */      0,145,        /* W0101011
  173. 142 W0101010        */      0,144,        /* W01010101
  174. 143 W01010100       */      1,51,    /*
  175. 144 W01010101       */      1,52,    /*
  176. 145 W0101011        */      1,25,    /*
  177. 146 W01011          */      0,154,        /* W010111
  178. 147 W010110         */      0,151,        /* W0101101
  179. 148 W0101100        */      0,150,        /* W01011001
  180. 149 W01011000       */      1,55,    /*
  181. 150 W01011001       */      1,56,    /*
  182. 151 W0101101        */      0,153,        /* W01011011
  183. 152 W01011010       */      1,57,    /*
  184. 153 W01011011       */      1,58,    /*
  185. 154 W010111         */      1,192,    /*
  186. 155 W011            */      0,191,        /* W0111
  187. 156 W0110           */      0,168,        /* W01101
  188. 157 W01100          */      0,159,        /* W011001
  189. 158 W011000         */      1,1664,    /*
  190. 159 W011001         */      0,163,        /* W0110011
  191. 160 W0110010        */      0,162,        /* W01100101
  192. 161 W01100100       */      1,448,    /*
  193. 162 W01100101       */      1,512,    /*
  194. 163 W0110011        */      0,167,        /* W01100111
  195. 164 W01100110       */      0,166,        /* W011001101
  196. 165 W011001100      */      1,704,    /*
  197. 166 W011001101      */      1,768,    /*
  198. 167 W01100111       */      1,640,    /*
  199. 168 W01101          */      0,182,        /* W011011
  200. 169 W011010         */      0,175,        /* W0110101
  201. 170 W0110100        */      0,172,        /* W01101001
  202. 171 W01101000       */      1,576,    /*
  203. 172 W01101001       */      0,174,        /* W011010011
  204. 173 W011010010      */      1,832,    /*
  205. 174 W011010011      */      1,896,    /*
  206. 175 W0110101        */      0,179,        /* W01101011
  207. 176 W01101010       */      0,178,        /* W011010101
  208. 177 W011010100      */      1,960,    /*
  209. 178 W011010101      */      1,1024,    /*
  210. 179 W01101011       */      0,181,        /* W011010111
  211. 180 W011010110      */      1,1088,    /*
  212. 181 W011010111      */      1,1152,    /*
  213. 182 W011011         */      0,190,        /* W0110111
  214. 183 W0110110        */      0,187,        /* W01101101
  215. 184 W01101100       */      0,186,        /* W011011001
  216. 185 W011011000      */      1,1216,    /*
  217. 186 W011011001      */      1,1280,    /*
  218. 187 W01101101       */      0,189,        /* W011011011
  219. 188 W011011010      */      1,1344,    /*
  220. 189 W011011011      */      1,1408,    /*
  221. 190 W0110111        */      1,256,    /*
  222. 191 W0111           */      1,2,    /*
  223. 192 W1              */      0,206,        /* W11
  224. 193 W10             */      0,199,        /* W101
  225. 194 W100            */      0,196,        /* W1001
  226. 195 W1000           */      1,3,    /*
  227. 196 W1001           */      0,198,        /* W10011
  228. 197 W10010          */      1,128,    /*
  229. 198 W10011          */      1,8,    /*
  230. 199 W101            */      0,205,        /* W1011
  231. 200 W1010           */      0,202,        /* W10101
  232. 201 W10100          */      1,9,    /*
  233. 202 W10101          */      0,204,        /* W101011
  234. 203 W101010         */      1,16,    /*
  235. 204 W101011         */      1,17,    /*
  236. 205 W1011           */      1,4,    /*
  237. 206 W11             */      0,214,        /* W111
  238. 207 W110            */      0,209,        /* W1101
  239. 208 W1100           */      1,5,    /*
  240. 209 W1101           */      0,213,        /* W11011
  241. 210 W11010          */      0,212,        /* W110101
  242. 211 W110100         */      1,14,    /*
  243. 212 W110101         */      1,15,    /*
  244. 213 W11011          */      1,64,    /*
  245. 214 W111            */      0,216,        /* W1111
  246. 215 W1110           */      1,6,    /*
  247. 216 W1111           */      1,7
  248.                 };
  249.  
  250.  
  251. static struct TreeStr blackTable[] =
  252.                 {
  253.                                 /*
  254.   0 B               */      0,206,        /* B1
  255.   1 B0              */      0,203,        /* B01
  256.   2 B00             */      0,200,        /* B001
  257.   3 B000            */      0,195,        /* B0001
  258.   4 B0000           */      0,152,        /* B00001
  259.   5 B00000          */      0,101,        /* B000001
  260.   6 B000000         */      0,34,        /* B0000001
  261.   7 B0000000        */      0,9,        /* B00000001
  262.   8 B00000000       */      1,-2,    /*
  263.   9 B00000001       */      0,23,        /* B000000011
  264.  10 B000000010      */      0,16,        /* B0000000101
  265.  11 B0000000100     */      0,13,        /* B00000001001
  266.  12 B00000001000    */      1,1792,    /*
  267.  13 B00000001001    */      0,15,        /* B000000010011
  268.  14 B000000010010   */      1,1984,    /*
  269.  15 B000000010011   */      1,2048,    /*
  270.  16 B0000000101     */      0,20,        /* B00000001011
  271.  17 B00000001010    */      0,19,        /* B000000010101
  272.  18 B000000010100   */      1,2112,    /*
  273.  19 B000000010101   */      1,2176,    /*
  274.  20 B00000001011    */      0,22,        /* B000000010111
  275.  21 B000000010110   */      1,2240,    /*
  276.  22 B000000010111   */      1,2304,    /*
  277.  23 B000000011      */      0,27,        /* B0000000111
  278.  24 B0000000110     */      0,26,        /* B00000001101
  279.  25 B00000001100    */      1,1856,    /*
  280.  26 B00000001101    */      1,1920,    /*
  281.  27 B0000000111     */      0,31,        /* B00000001111
  282.  28 B00000001110    */      0,30,        /* B000000011101
  283.  29 B000000011100   */      1,2368,    /*
  284.  30 B000000011101   */      1,2432,    /*
  285.  31 B00000001111    */      0,33,        /* B000000011111
  286.  32 B000000011110   */      1,2496,    /*
  287.  33 B000000011111   */      1,2560,    /*
  288.  34 B0000001        */      0,68,        /* B00000011
  289.  35 B00000010       */      0,49,        /* B000000101
  290.  36 B000000100      */      0,38,        /* B0000001001
  291.  37 B0000001000     */      1,18,    /*
  292.  38 B0000001001     */      0,44,        /* B00000010011
  293.  39 B00000010010    */      0,41,        /* B000000100101
  294.  40 B000000100100   */      1,52,    /*
  295.  41 B000000100101   */      0,43,        /* B0000001001011
  296.  42 B0000001001010  */      1,640,    /*
  297.  43 B0000001001011  */      1,704,    /*
  298.  44 B00000010011    */      0,48,        /* B000000100111
  299.  45 B000000100110   */      0,47,        /* B0000001001101
  300.  46 B0000001001100  */      1,768,    /*
  301.  47 B0000001001101  */      1,832,    /*
  302.  48 B000000100111   */      1,55,    /*
  303.  49 B000000101      */      0,61,        /* B0000001011
  304.  50 B0000001010     */      0,56,        /* B00000010101
  305.  51 B00000010100    */      0,53,        /* B000000101001
  306.  52 B000000101000   */      1,56,    /*
  307.  53 B000000101001   */      0,55,        /* B0000001010011
  308.  54 B0000001010010  */      1,1280,    /*
  309.  55 B0000001010011  */      1,1344,    /*
  310.  56 B00000010101    */      0,60,        /* B000000101011
  311.  57 B000000101010   */      0,59,        /* B0000001010101
  312.  58 B0000001010100  */      1,1408,    /*
  313.  59 B0000001010101  */      1,1472,    /*
  314.  60 B000000101011   */      1,59,    /*
  315.  61 B0000001011     */      0,67,        /* B00000010111
  316.  62 B00000010110    */      0,64,        /* B000000101101
  317.  63 B000000101100   */      1,60,    /*
  318.  64 B000000101101   */      0,66,        /* B0000001011011
  319.  65 B0000001011010  */      1,1536,    /*
  320.  66 B0000001011011  */      1,1600,    /*
  321.  67 B00000010111    */      1,24,    /*
  322.  68 B00000011       */      0,86,        /* B000000111
  323.  69 B000000110      */      0,77,        /* B0000001101
  324.  70 B0000001100     */      0,72,        /* B00000011001
  325.  71 B00000011000    */      1,25,    /*
  326.  72 B00000011001    */      0,76,        /* B000000110011
  327.  73 B000000110010   */      0,75,        /* B0000001100101
  328.  74 B0000001100100  */      1,1664,    /*
  329.  75 B0000001100101  */      1,1728,    /*
  330.  76 B000000110011   */      1,320,    /*
  331.  77 B0000001101     */      0,81,        /* B00000011011
  332.  78 B00000011010    */      0,80,        /* B000000110101
  333.  79 B000000110100   */      1,384,    /*
  334.  80 B000000110101   */      1,448,    /*
  335.  81 B00000011011    */      0,85,        /* B000000110111
  336.  82 B000000110110   */      0,84,        /* B0000001101101
  337.  83 B0000001101100  */      1,512,    /*
  338.  84 B0000001101101  */      1,576,    /*
  339.  85 B000000110111   */      1,53,    /*
  340.  86 B000000111      */      0,100,        /* B0000001111
  341.  87 B0000001110     */      0,93,        /* B00000011101
  342.  88 B00000011100    */      0,90,        /* B000000111001
  343.  89 B000000111000   */      1,54,    /*
  344.  90 B000000111001   */      0,92,        /* B0000001110011
  345.  91 B0000001110010  */      1,896,    /*
  346.  92 B0000001110011  */      1,960,    /*
  347.  93 B00000011101    */      0,97,        /* B000000111011
  348.  94 B000000111010   */      0,96,        /* B0000001110101
  349.  95 B0000001110100  */      1,1024,    /*
  350.  96 B0000001110101  */      1,1088,    /*
  351.  97 B000000111011   */      0,99,        /* B0000001110111
  352.  98 B0000001110110  */      1,1152,    /*
  353.  99 B0000001110111  */      1,1216,    /*
  354. 100 B0000001111     */      1,64,    /*
  355. 101 B000001         */      0,127,        /* B0000011
  356. 102 B0000010        */      0,104,        /* B00000101
  357. 103 B00000100       */      1,13,    /*
  358. 104 B00000101       */      0,118,        /* B000001011
  359. 105 B000001010      */      0,111,        /* B0000010101
  360. 106 B0000010100     */      0,108,        /* B00000101001
  361. 107 B00000101000    */      1,23,    /*
  362. 108 B00000101001    */      0,110,        /* B000001010011
  363. 109 B000001010010   */      1,50,    /*
  364. 110 B000001010011   */      1,51,    /*
  365. 111 B0000010101     */      0,115,        /* B00000101011
  366. 112 B00000101010    */      0,114,        /* B000001010101
  367. 113 B000001010100   */      1,44,    /*
  368. 114 B000001010101   */      1,45,    /*
  369. 115 B00000101011    */      0,117,        /* B000001010111
  370. 116 B000001010110   */      1,46,    /*
  371. 117 B000001010111   */      1,47,    /*
  372. 118 B000001011      */      0,126,        /* B0000010111
  373. 119 B0000010110     */      0,123,        /* B00000101101
  374. 120 B00000101100    */      0,122,        /* B000001011001
  375. 121 B000001011000   */      1,57,    /*
  376. 122 B000001011001   */      1,58,    /*
  377. 123 B00000101101    */      0,125,        /* B000001011011
  378. 124 B000001011010   */      1,61,    /*
  379. 125 B000001011011   */      1,256,    /*
  380. 126 B0000010111     */      1,16,    /*
  381. 127 B0000011        */      0,151,        /* B00000111
  382. 128 B00000110       */      0,138,        /* B000001101
  383. 129 B000001100      */      0,131,        /* B0000011001
  384. 130 B0000011000     */      1,17,    /*
  385. 131 B0000011001     */      0,135,        /* B00000110011
  386. 132 B00000110010    */      0,134,        /* B000001100101
  387. 133 B000001100100   */      1,48,    /*
  388. 134 B000001100101   */      1,49,    /*
  389. 135 B00000110011    */      0,137,        /* B000001100111
  390. 136 B000001100110   */      1,62,    /*
  391. 137 B000001100111   */      1,63,    /*
  392. 138 B000001101      */      0,146,        /* B0000011011
  393.  
  394. 139 B0000011010     */      0,143,        /* B00000110101
  395.  
  396. 140 B00000110100    */      0,142,        /* B000001101001
  397. 141 B000001101000   */      1,30,    /*
  398. 142 B000001101001   */      1,31,    /*
  399. 143 B00000110101    */      0,145,        /* B000001101011
  400. 144 B000001101010   */      1,32,    /*
  401. 145 B000001101011   */      1,33,    /*
  402. 146 B0000011011     */      0,150,        /* B00000110111
  403. 147 B00000110110    */      0,149,        /* B000001101101
  404. 148 B000001101100   */      1,40,    /*
  405. 149 B000001101101   */      1,41,    /*
  406. 150 B00000110111    */      1,22,    /*
  407. 151 B00000111       */      1,14,    /*
  408. 152 B00001          */      0,156,        /* B000011
  409. 153 B000010         */      0,155,        /* B0000101
  410. 154 B0000100        */      1,10,    /*
  411. 155 B0000101        */      1,11,    /*
  412. 156 B000011         */      0,194,        /* B0000111
  413. 157 B0000110        */      0,173,        /* B00001101
  414. 158 B00001100       */      0,160,        /* B000011001
  415. 159 B000011000      */      1,15,    /*
  416. 160 B000011001      */      0,168,        /* B0000110011
  417. 161 B0000110010     */      0,165,        /* B00001100101
  418. 162 B00001100100    */      0,164,        /* B000011001001
  419. 163 B000011001000   */      1,128,    /*
  420. 164 B000011001001   */      1,192,    /*
  421. 165 B00001100101    */      0,167,        /* B000011001011
  422. 166 B000011001010   */      1,26,    /*
  423. 167 B000011001011   */      1,27,    /*
  424. 168 B0000110011     */      0,172,        /* B00001100111
  425. 169 B00001100110    */      0,171,        /* B000011001101
  426. 170 B000011001100   */      1,28,    /*
  427. 171 B000011001101   */      1,29,    /*
  428. 172 B00001100111    */      1,19,    /*
  429. 173 B00001101       */      0,187,        /* B000011011
  430. 174 B000011010      */      0,180,        /* B0000110101
  431. 175 B0000110100     */      0,177,        /* B00001101001
  432. 176 B00001101000    */      1,20,    /*
  433. 177 B00001101001    */      0,179,        /* B000011010011
  434. 178 B000011010010   */      1,34,    /*
  435. 179 B000011010011   */      1,35,    /*
  436. 180 B0000110101     */      0,184,        /* B00001101011
  437. 181 B00001101010    */      0,183,        /* B000011010101
  438. 182 B000011010100   */      1,36,    /*
  439. 183 B000011010101   */      1,37,    /*
  440. 184 B00001101011    */      0,186,        /* B000011010111
  441. 185 B000011010110   */      1,38,    /*
  442. 186 B000011010111   */      1,39,    /*
  443. 187 B000011011      */      0,193,        /* B0000110111
  444. 188 B0000110110     */      0,190,        /* B00001101101
  445. 189 B00001101100    */      1,21,    /*
  446. 190 B00001101101    */      0,192,        /* B000011011011
  447. 191 B000011011010   */      1,42,    /*
  448. 192 B000011011011   */      1,43,    /*
  449. 193 B0000110111     */      1,0,    /*
  450. 194 B0000111        */      1,12,    /*
  451. 195 B0001           */      0,199,        /* B00011
  452. 196 B00010          */      0,198,        /* B000101
  453. 197 B000100         */      1,9,    /*
  454. 198 B000101         */      1,8,    /*
  455. 199 B00011          */      1,7,    /*
  456. 200 B001            */      0,202,        /* B0011
  457. 201 B0010           */      1,6,    /*
  458. 202 B0011           */      1,5,    /*
  459. 203 B01             */      0,205,        /* B011
  460. 204 B010            */      1,1,    /*
  461. 205 B011            */      1,4,    /*
  462. 206 B1              */      0,208,        /* B11
  463. 207 B10             */      1,3,    /*
  464. 208 B11             */      1,2
  465.                 };
  466.  
  467.  
  468. /* ------------------------------------------------------------------- */
  469.  
  470. /* decode one row, update pointers */
  471.  
  472. OSErr HDecode(dstPtr, srcPtr, imageWidth)
  473. Ptr *srcPtr;
  474. Ptr *dstPtr;
  475. Int16 imageWidth;
  476. {
  477.     Int16 srcBit;
  478.     Int16 dstBit;
  479.     Int8 srcByte;
  480.     UInt8 dstByte;
  481.     Int16 srcBitCount;
  482.     Int16 dstBitCount;
  483.     Boolean whiteRun;
  484.     Int16 index;
  485.     Int16 runLength;
  486.     Int16 leftToAdd;
  487.     Int16 bytesLeft;
  488.     OSErr error;
  489.     Boolean mustReadTC;
  490.     
  491.     bytesLeft = (imageWidth + 7) / 8;
  492.     srcBit = 0;
  493.     dstBit = 0;
  494.     srcBitCount = 0;
  495.     dstBitCount = 0;
  496.     dstByte = 0;
  497.     whiteRun = TRUE;
  498.     index = 0;
  499.     error = noErr;
  500.     mustReadTC = FALSE;
  501.     
  502.     while ((mustReadTC || dstBit < imageWidth) && error == noErr)
  503.         {
  504.         index = 0;
  505.         while ((whiteRun ? whiteTable[index].type : blackTable[index].type)
  506.                     == 0 && error == noErr)
  507.             {
  508.             if (srcBitCount == 0)
  509.                 {
  510.                 srcByte = *(*srcPtr)++;
  511.                 srcBitCount = 8;
  512.                 }
  513.             if (srcByte < 0)
  514.                 {
  515.                 index =
  516.                     whiteRun ? whiteTable[index].ptr : blackTable[index].ptr;
  517.                 }
  518.             else
  519.                 index++;
  520.             srcByte = srcByte << 1;
  521.             srcBitCount--;
  522.             }
  523.         if ((whiteRun ? whiteTable[index].ptr : blackTable[index].ptr) < 0)
  524.             break;
  525.         runLength = whiteRun ? whiteTable[index].ptr : blackTable[index].ptr;
  526.         if (runLength < 0) error = -1000;
  527.         mustReadTC = runLength >= 64;
  528.         /* add run */
  529.         dstBit += runLength;
  530.         if (dstBit > imageWidth) error = -1003;
  531.         leftToAdd = runLength;
  532.         while (leftToAdd > 0 && dstBitCount < 8 && error == noErr)
  533.             {
  534.             dstByte = (dstByte << 1) | (whiteRun ? 0 : 1);
  535.             dstBitCount++;
  536.             leftToAdd--;
  537.             }
  538.         if (dstBitCount == 8 && error == noErr)
  539.             {
  540.             if (bytesLeft-- <= 0)
  541.                 error = -1001;
  542.             else
  543.                 *(*dstPtr)++ = dstByte;
  544.             dstBitCount = 0;
  545.             dstByte = 0;
  546.             }
  547.         while (leftToAdd >= 8 && error == noErr)
  548.             {
  549.             if (bytesLeft-- <= 0)
  550.                 error = -1001;
  551.             else
  552.                 *(*dstPtr)++ = whiteRun ? 0 : 0xff;
  553.             leftToAdd -= 8;
  554.             }
  555.         while (leftToAdd > 0 && error == noErr)
  556.             {
  557.             dstByte = (dstByte << 1) | (whiteRun ? 0 : 1);
  558.             dstBitCount++;
  559.             leftToAdd--;
  560.             }
  561.         if (runLength < 64) whiteRun = !whiteRun;
  562.         }
  563.     
  564.     
  565.     if (dstBitCount > 0 && error == noErr)
  566.         {
  567.         dstByte = dstByte << (8 - dstBitCount);
  568.         if (bytesLeft-- <= 0)
  569.             error = -1001;
  570.         else
  571.             *(*dstPtr)++ = dstByte;
  572.         }
  573.     
  574.     return(error);
  575. }
  576.  
  577. /* ------------------------------------------------------------------- */
  578.